"""
算法题：
一个人投篮12次，命中8次；假如命中标记为１，未命中标记为０，那么可能的组合可以表示为００００１１１１１１１１。求所有组合中，连续命中４次及以上的概率。
解题思路：主要是把所有的组合情况通过itertools模块枚举出来，找出其中满足条件的，计算概率！
"""

import itertools
from copy import copy
import re

# 初始字符串列表
init_list = ["1" for i in range(12)]

# 用组合来生成“０”可能出现位置的索引的情况列表
index_list = []
for i in itertools.combinations(range(0, 12), 4):
    index_list.append(i)

# 生成所有可能情况的列表
all_possibility_list = []
for index_tuple in index_list:
    copy_start_list = copy(init_list)
    # print(copy_start_list)
    for index in index_tuple:
        copy_start_list[index] = '0'
    all_possibility_list.append(copy_start_list)
all_possibility = len(all_possibility_list)
print("可能出现的情况总数：", all_possibility)

# 统计有四个及以上连续“１”出现的情况次数
count = 0
for list_item in all_possibility_list:
    mystr = "".join(list_item)
    find_str = re.findall(r"1{4,8}", mystr)
    if find_str:
        count += 1
print("符合有四次及以上连续投中的情况总数:", count)

print("出现的概率为：", count/all_possibility)
